Assignment 1

1.1 Plot the network

Assignment 2

2.1 Bubble chart (animated)

From bubble size, China and US seems larger consumption of oil and coal when compared to other countries. Till 2001, consumption of coal by China is gradually increased. After 2001, it is rapidly increasing. Till 1979, US exhibits more consumption of oil, after that a gradual increase in coal consumption can be seen along with oil. UK is the least consumer of oil and coal in this case. Consumption of oil by France and Brazil is less without using coal. India has the gradual increase in consuming both over years.

oilcoal <- read.csv("Oilcoal.csv", sep = ";", dec = ",", header = TRUE, row.names = NULL)

oilcoal %>% plot_ly(x = ~Oil, y =~Coal, frame=~Year, text = ~Country, 
    hoverinfo = "text", type = 'scatter', mode = 'markers', size = ~Marker.size) %>%
    animation_opts(200, easing = "circle", redraw = F) %>% add_markers(color=~Country) %>% 
    layout(title="Consumption of Oil and Coal by Countries")

2.2 Motion chart for France and Germany

From the avove bubble chart, it seems France and Germany had similar motion patterns. Consumption of coal by France reduced gradually because of nuclear power. France’s present electricity generation mix is a result of the French government deciding in 1974, just after the first oil shock, to expand rapidly the country’s nuclear power capacity, using Westinghouse technology. About 75% of electricity is from nuclear energy and 17% of France’s electricity is from recycled nuclear fuel. It seems after 1990, Germany’s coal and oil consumption gets decreased. In 1990, the German reunification happened (east and west Germany united). The sale of oil, previously an important source of hard currency, became less profitable due to changes in the world economy.

oilcoal %>% filter(Country==c("France","Germany"))%>%
    plot_ly(x = ~Oil, y =~Coal, frame=~Year, text = ~Country, 
    hoverinfo = "text", type = 'scatter', mode = 'markers', size = ~Marker.size) %>%
    animation_opts(200, easing = "cubic", redraw = F) %>% add_markers(color=~Country) %>% 
    layout(title="Consumption of Oil and Coal by France and Germany")

2.3 Line plot of Oilp Vs Country

France and Germany exhibits same motion pattern. They are gradually increasing over time. All countries except China exhibits increased value till 1972. Advantage: A quick analysis can be done using the animated line plot when compared to bubble chart. It clearly shows the rise or fall of data points. The changes can easily be tracked over time. Disadvantage: It’s not visually appealing and not suitable for large range of data.

Oilp <- oilcoal %>% group_by(Year, Country) %>% mutate(oilp=Oil/(Oil+Coal))
Oilp_0 <- oilcoal %>% group_by(Year, Country) %>% mutate(oilp=0)
rbind(Oilp, Oilp_0) %>% 
plot_ly(x = ~oilp, y =~Country, frame=~Year, text = ~Country, 
    hoverinfo = "text", type = 'scatter', mode = 'line', size = ~Marker.size) %>%
    animation_opts(200, easing = "cubic", redraw = F) #%>% add_lines(color=~Country)

2.4 Line plot with elastic easing

Advantage: Animated transition is smoother using “easing” function. Using “elastic” type of easing function, the minor changes can be easily tracked. When the change in data is larger or smaller, the transition will be clear for these changes and so, quite accurate analysis can be done when compared to easing function “cubic”. Disadvantage: The elastic type may return eased times slightly outside the range of some specific values.

rbind(Oilp, Oilp_0) %>% 
plot_ly(x = ~oilp, y =~Country, frame=~Year, text = ~Country, 
    hoverinfo = "text", type = 'scatter', mode = 'line', size = ~Marker.size) %>%
    animation_opts(200, easing = "elastic", redraw = F) #%>% add_lines(color=~Country)

2.5 Guided 2D-tour visualizing coal consumption

tour_df <- read.csv2("Oilcoal.csv", sep = ";")
tour_df<- tour_df[,1:5]

mat <- rescale(tour_df[,2:5])
rownames(mat) <- tour_df[,1]
set.seed(12345)
#tour <- new_tour(mat, grand_tour(), NULL)
tour<- new_tour(mat, guided_tour(cmass), NULL)

steps <- c(0, rep(1/15, 200))
Projs<-lapply(steps, function(step_size){  
  step <- tour(step_size)
  if(is.null(step)) {
    .GlobalEnv$tour<- new_tour(mat, guided_tour(cmass), NULL)
    step <- tour(step_size)
  }
  step
}
)
## Value 0.848 13.0% better (0.734 away) - NEW BASIS
## Value 0.867 2.3% better (0.390 away) - NEW BASIS
## Value 0.873 0.7% better (0.329 away) - NEW BASIS
## Value 0.881 1.0% better (0.283 away) - NEW BASIS
## Value 0.887 0.6% better (0.201 away) - NEW BASIS
## Value 0.914 3.1% better (0.572 away) - NEW BASIS
## Value 0.949 3.8% better (0.440 away) - NEW BASIS
## Value 0.961 1.3% better (0.199 away) - NEW BASIS
## Value 0.965 0.5% better (0.126 away) - NEW BASIS
## Value 0.969 0.4% better (0.178 away) - NEW BASIS
## Value 0.971 0.2% better (0.095 away) - NEW BASIS
## Value 0.971 0.1% better (0.057 away)
## Value 0.972 0.1% better (0.064 away)
## Value 0.971 0.0% better (0.050 away)
## Value 0.971 0.0% better (0.031 away)
## Value 0.971 0.0% better (0.027 away)
## Value 0.971 0.0% better (0.047 away)
## Value 0.972 0.1% better (0.097 away) - NEW BASIS
## Value 0.972 0.0% better (0.013 away)
## Value 0.972 0.0% better (0.011 away)
## Value 0.972 0.0% better (0.009 away)
## Value 0.972 0.0% better (0.017 away)
## Value 0.972 0.0% better (0.015 away)
## Value 0.972 0.0% better (0.019 away)
## Value 0.972 0.0% better (0.018 away)
## Value 0.972 0.0% better (0.022 away)
## Value 0.972 0.0% better (0.014 away)
## Value 0.972 0.0% better (0.016 away)
## Value 0.972 0.0% better (0.015 away)
## Value 0.972 0.0% better (0.017 away)
## Value 0.972 0.0% better (0.015 away)
## Value 0.972 0.0% better (0.011 away)
## Value 0.972 0.0% better (0.017 away)
## Value 0.972 0.0% better (0.012 away)
## Value 0.972 0.0% better (0.016 away)
## Value 0.972 0.0% better (0.018 away)
## Value 0.972 0.0% better (0.023 away)
## Value 0.972 0.0% better (0.009 away)
## Value 0.972 0.0% better (0.016 away)
## Value 0.972 0.0% better (0.013 away)
## Value 0.972 0.0% better (0.014 away)
## Value 0.972 0.0% better (0.010 away)
## No better bases found after 25 tries.  Giving up.
## Final projection: 
## 0.171  -0.031  
## -0.117  0.961  
## -0.875  -0.218  
## 0.437  -0.168  
## Value 0.866 15.4% better (0.781 away) - NEW BASIS
## Value 0.874 1.0% better (0.163 away) - NEW BASIS
## Value 0.912 4.3% better (0.781 away) - NEW BASIS
## Value 0.937 2.8% better (0.290 away) - NEW BASIS
## Value 0.960 2.4% better (0.453 away) - NEW BASIS
## Value 0.964 0.5% better (0.171 away) - NEW BASIS
## Value 0.967 0.3% better (0.089 away) - NEW BASIS
## Value 0.968 0.1% better (0.084 away) - NEW BASIS
## Value 0.969 0.2% better (0.087 away) - NEW BASIS
## Value 0.970 0.1% better (0.062 away)
## Value 0.969 0.1% better (0.045 away)
## Value 0.970 0.2% better (0.079 away) - NEW BASIS
## Value 0.971 0.1% better (0.054 away)
## Value 0.971 0.1% better (0.078 away) - NEW BASIS
## Value 0.972 0.1% better (0.046 away)
## Value 0.972 0.0% better (0.058 away)
## Value 0.972 0.1% better (0.091 away) - NEW BASIS
## Value 0.972 0.0% better (0.015 away)
## Value 0.972 0.0% better (0.012 away)
## Value 0.972 0.0% better (0.009 away)
## Value 0.972 0.0% better (0.029 away)
## Value 0.972 0.0% better (0.023 away)
## Value 0.972 0.0% better (0.020 away)
## Value 0.972 0.0% better (0.034 away)
## Value 0.972 0.0% better (0.021 away)
## Value 0.972 0.0% better (0.016 away)
## Value 0.972 0.0% better (0.021 away)
## Value 0.972 0.0% better (0.012 away)
## Value 0.972 0.0% better (0.011 away)
## Value 0.972 0.0% better (0.033 away)
## Value 0.972 0.0% better (0.033 away)
## Value 0.972 0.0% better (0.021 away)
## Value 0.972 0.0% better (0.010 away)
## Value 0.972 0.0% better (0.032 away)
## Value 0.972 0.0% better (0.018 away)
## Value 0.972 0.0% better (0.009 away)
## Value 0.972 0.0% better (0.041 away)
## Value 0.972 0.0% better (0.032 away)
## Value 0.972 0.0% better (0.032 away)
## Value 0.972 0.0% better (0.036 away)
## Value 0.972 0.0% better (0.015 away)
## No better bases found after 25 tries.  Giving up.
## Final projection: 
## 0.170  -0.045  
## -0.327  0.915  
## -0.810  -0.399  
## 0.456  -0.037  
## Value 0.848 12.9% better (0.781 away) - NEW BASIS
## Value 0.876 3.4% better (0.362 away) - NEW BASIS
## Value 0.911 4.0% better (0.781 away) - NEW BASIS
## Value 0.947 4.1% better (0.561 away) - NEW BASIS
# projection of each observation
tour_dat <- function(i) {
  step <- Projs[[i]]
  proj <- center(mat %*% step$proj)
  data.frame(x = proj[,1], y = proj[,2], state = rownames(mat))
}

# projection of each variable's axis
proj_dat <- function(i) {
  step <- Projs[[i]]
  data.frame(
    x = step$proj[,1], y = step$proj[,2], variable = colnames(mat)
  )
}
stepz <- cumsum(steps)

# tidy version of tour data

tour_dats <- lapply(1:length(steps), tour_dat)
tour_datz <- Map(function(x, y) cbind(x, step = y), tour_dats, stepz)
tour_dat <- dplyr::bind_rows(tour_datz)

# tidy version of tour projection data
proj_dats <- lapply(1:length(steps), proj_dat)
proj_datz <- Map(function(x, y) cbind(x, step = y), proj_dats, stepz)
proj_dat <- dplyr::bind_rows(proj_datz)

ax <- list(
  title = "", showticklabels = FALSE,
  zeroline = FALSE, showgrid = FALSE,
  range = c(-1.1, 1.1)
)
# for nicely formatted slider labels
options(digits = 3)
tour_dat <- highlight_key(tour_dat, ~state, group = "A")
twoD_tour <- proj_dat %>%
  plot_ly(x = ~x, y = ~y, frame = ~step, color = I("black")) %>%
  add_segments(xend = 0, yend = 0, color = I("gray80")) %>%
  add_text(text = ~variable) %>%
  add_markers(data = tour_dat, text = ~state, ids = ~state, hoverinfo = "text") %>%
  layout(xaxis = ax, yaxis = ax)%>%animation_opts(frame=0, transition=0, redraw = F)
twoD_tour